﻿
#ifndef __AmapView_H__
#define __AmapView_H__

#include "CrossApp.h"

USING_NS_CC;

//地图上的点标记
class AmapMarker : public CAObject
{
public:

	AmapMarker(string imgurl, bool draggable, string title, string content, double lat, double lng) 
		: m_strImg(imgurl), 
		m_bDraggable(draggable),
		m_strTitle(title),
		m_strContent(content),
		m_dLat(lat),
		m_dLng(lng){}

	const string& getImg()
	{
		return m_strImg;
	}

	bool getDraggable()
	{
		return m_bDraggable;
	}

	const string& getTitle()
	{
		return m_strTitle;
	}

	const string& getContent()
	{
		return m_strContent;
	}

	double getLat()
	{
		return m_dLat;
	}

	double getLng()
	{
		return m_dLng;
	}

private:

	string m_strImg;//图标，可以不设置，有默认图片的
	bool m_bDraggable;//是否可拖动
	string m_strTitle;//点击marker显示的窗口中标题
	string m_strContent;//点击marker显示的窗口中内容
	double m_dLat;//marker纬度
	double m_dLng;//marker经度
};

class AmapViewImpl;

//回调都不是ui线程，通过CASchedule回到主线程
class AmapViewDelegate
{
public:

	//地图加载成功回调，ios没有此方法
	virtual void onAmapLoaded(){};
	
	//地图点击回调
	virtual void onAmapClicked(double lat, double lng){};

	//地图marker拖拽回调
	//lat,lng是拖动的新的经纬度
	virtual void onAmapMarkerDragStart(AmapMarker* marker, double lat, double lng){};
	virtual void onAmapMarkerDrag(AmapMarker* marker, double lat, double lng){};
	virtual void onAmapMarkerDragEnd(AmapMarker* marker, double lat, double lng){};
	
	//地图marker点击事件
	virtual void onAmapMarkerClick(AmapMarker* marker){};
	
	//地图marker的InfoWindow点击
	virtual void onAmapMarkerInfoWindowClick(AmapMarker* marker){};

	//地图右上角定位按钮的回调
	//code表示定位成功与否，0表示定位并获取地理信息成功，-1表示定位成功但获取地理信息失败，-2表示都失败
    //lat经度
    //lng纬度
    //formatAddr完整地址
    //province省 city市 district区 street街道 number门牌 poi兴趣点 adcode地区编码
	virtual void onAmapLocationEnd(int code, double lat, double lng, const string& formatAddr, const string& province, const string& city, const string& district, const string& street, const string& number, const string& poi, const string& adcode){};
};

class AmapView : public CAView
{
public:

	AmapView();
    
	virtual ~AmapView();

	static AmapView* createWithFrame(const DRect& rect);

	static AmapView* createWithCenter(const DRect& rect);

	static AmapView* createWithLayout(const DLayout& layout);

	//设置地图中心点
	void setMapCenter(double lat, double lng);

    //定位，单次定位，不是连续定位的
	void startLocation();

	//设置地图缩放level（Android 3.0-19.0）,默认10.0
	void setMapZoomLevel(float level);

	//设置可见
	virtual void setVisible(bool visible);

    //marker new过之后在调用addMarker之后需要release，但是不需要滞空
	void addMarker(AmapMarker* marker);

    //删除指定的marker
	void deleteMarker(AmapMarker* marker);

    //获取你添加的所有marker，key值没有太多作用
	std::map<string, AmapMarker*>& getAllMarkers();

    //清理所有的marker
	void clearMarkers();

	CC_SYNTHESIZE(AmapViewDelegate*, m_pAmapViewDelegate, AmapViewDelegate);

	//无需调用
	virtual void onEnterTransitionDidFinish();
	//无需调用
	virtual void onExitTransitionDidStart();

private:

	virtual void update(float dt);

	AmapViewImpl *_impl;

	DPoint m_obLastPoint;

    DSize m_obLastContentSize;
};

#endif
